home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / nrpas13.arc / BSSTEP.DEM < prev    next >
Text File  |  1991-05-01  |  1KB  |  66 lines

  1. PROGRAM d15r6(input,output);
  2. (* driver for routine BSSTEP *)
  3. CONST
  4.    n=4;
  5.    glimax=11;
  6.    glnmax=10;
  7.    glncol=7;
  8. TYPE
  9.    glyarray = ARRAY [1..n] OF real;
  10.    glnarray = glyarray;
  11. VAR
  12.    glx : ARRAY [1..glimax] OF real;
  13.    gld : ARRAY [1..glnmax,1..glncol] OF real;
  14.    eps,hdid,hnext,htry,x : real;
  15.    i : integer;
  16.    y,dydx,yscal : glyarray;
  17.  
  18. PROCEDURE derivs(x: real; y: glyarray; VAR dydx: glyarray);
  19. (* Programs using DERIVS must define the type
  20. TYPE
  21.    glyarray = ARRAY [1..4] OF real;
  22. in the main routine. *)
  23. BEGIN
  24.    dydx[1] := -y[2];
  25.    dydx[2] := y[1]-(1.0/x)*y[2];
  26.    dydx[3] := y[2]-(2.0/x)*y[3];
  27.    dydx[4] := y[3]-(3.0/x)*y[4]
  28. END;
  29.  
  30. (*$I MODFILE.PAS *)
  31. (*$I BESSJ0.PAS *)
  32.  
  33. (*$I BESSJ1.PAS *)
  34.  
  35. (*$I BESSJ.PAS *)
  36.  
  37. (*$I MMID.PAS *)
  38.  
  39. (*$I RZEXTR.PAS *)
  40.  
  41. (*$I BSSTEP.PAS *)
  42.  
  43. BEGIN
  44.    x := 1.0;
  45.    y[1] := bessj0(x);
  46.    y[2] := bessj1(x);
  47.    y[3] := bessj(2,x);
  48.    y[4] := bessj(3,x);
  49.    dydx[1] := -y[2];
  50.    dydx[2] := y[1]-y[2];
  51.    dydx[3] := y[2]-2.0*y[3];
  52.    dydx[4] := y[3]-3.0*y[4];
  53.    FOR i := 1 to n DO BEGIN
  54.       yscal[i] := 1.0
  55.    END;
  56.    htry := 1.0;
  57.    writeln;
  58.    writeln('eps':10,'htry':12,'hdid':12,'hnext':12);
  59.    FOR i := 1 to 15 DO BEGIN
  60.       eps := exp(-i);
  61.       bsstep(y,dydx,n,x,htry,eps,yscal,hdid,hnext);
  62.       writeln('   ',eps:11,htry:8:2,hdid:14:6,hnext:12:6)
  63.    END
  64. END.
  65.  
  66.